package com.fanghaoran.notes.util;

import com.fanghaoran.notes.entity.User;

import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

/**
 * @Author: win11
 * @Date: 2023/04/17/18:22
 * @Description: 发送邮件工具类
 */
public class EmailUtil {
    /**
     * 发送邮件
     * @param user 用户的信息
     * @param code 验证码
     */
    public static void sendEmail(User user,String code){
        //发送方邮箱地址
        String myAccount = "15014317134@163.com";
        //授权码
        String myPass = "ZFOCIRTCHBYRCOAA";
        //发件人 邮箱的 SMTP 服务器地址
        String smtpHost = "smtp.163.com";
        //组成 properties
        Properties prop = new Properties();
        //设置协议类型
        prop.setProperty("mail.transport.protocol", "smtp");
        //定义发件人的邮箱服务器地址
        prop.setProperty("mail.smtp.host", smtpHost);
        //设置请求验证
        prop.setProperty("mail.smtp.auth", "true");
        //Session对象 创建会话 用于和邮箱服务器进行交互
        Session session = Session.getDefaultInstance(prop);


        //调用生成邮件的方法
        MimeMessage message = createMsg(session,myAccount,user,code);
        //4.利用Transport 发送邮件
        try {
            Transport tran = session.getTransport();
            //连接服务器 确认发送方 是否授权
            tran.connect(myAccount, myPass);
            //发送邮件 将message 对象 传给 Transport 对象 将邮件发送出去
            //参数1 要发的内容 参数2 要给哪些人发
            //message.getAllRecipients() 获取到所有的收件人 | 抄送 | 密送
            tran.sendMessage(message, message.getAllRecipients());
            //关闭连接
            tran.close();
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /**
     * 创建邮件(收件人 发件人 邮箱内容等)
     * @param session 获取邮件对象要用到的
     * @param myAccount 发送人账户
     * @param user 用户信息
     * @param code 验证码
     * @return 返回邮件对象
     */
    private static MimeMessage createMsg(Session session, String myAccount, User user,String code) {
        //使用session对象 获取待发送的邮件信息
        MimeMessage message = new MimeMessage(session);
        //3.设置发件人 收件人 标题 邮件内容 附件 发送时间等等
        try {
            //发件人 from
            message.setFrom(new InternetAddress(myAccount, "拼多多", "utf-8"));
            //收件人 to
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(user.getEmail(), user.getUsername(), "utf-8"));
            //3.3生成邮件主题
            message.setSubject("PDD商城邮箱验证获取修改密码的验证码","utf-8");
            //设置邮件正文
            message.setText("亲爱的用户,您修改密码所需要的验证码为:"+code);
            //保存设置
            message.saveChanges();
        } catch (UnsupportedEncodingException | MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return message;
    }
}
